package com.weijian.service;

import com.weijian.common.result.ApiResponse;
import com.weijian.dal.entity.MatchResult;
import com.weijian.dal.entity.Route;
import com.weijian.dal.entity.Shipment;
import com.weijian.dto.data.BatchStatistics;
import com.weijian.dto.match.MatchResultData;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * CSV数据处理服务接口
 */
public interface CsvDataService {

    /**
     * 解析并保存路线CSV文件
     *
     * @param file     CSV文件
     * @param batchId  批次ID
     * @return 解析结果
     * @throws IOException IO异常
     */
    ApiResponse<String> parseAndSaveRouteCsv(MultipartFile file, Integer batchId) throws IOException;

    /**
     * 解析并保存货物CSV文件
     *
     * @param file     CSV文件
     * @param batchId  批次ID
     * @return 解析结果
     * @throws IOException IO异常
     */
    ApiResponse<String> parseAndSaveShipmentCsv(MultipartFile file, Integer batchId) throws IOException;

    /**
     * 解析并保存稳定匹配结果CSV文件
     *
     * @param file     CSV文件
     * @param batchId  批次ID
     * @return 解析结果
     * @throws IOException IO异常
     */
    ApiResponse<String> parseAndSaveMatchResultCsv(MultipartFile file, Integer batchId) throws IOException;
    
    /**
     * 保存稳定匹配结果数据（从已解析的数据）
     *
     * @param matchResultData 匹配结果数据
     * @param taskId 关联的任务ID
     * @param batchId 批次ID
     * @return 保存结果，包含匹配结果ID
     */
    ApiResponse<Integer> saveMatchResultData(MatchResultData matchResultData, String taskId, Integer batchId);
    
    /**
     * 解析路线CSV文件
     *
     * @param file    CSV文件
     * @param dataId  数据ID
     * @return 路线列表
     * @throws IOException IO异常
     */
    List<Route> parseRouteCsv(MultipartFile file, Integer dataId) throws IOException;

    /**
     * 解析货物CSV文件
     *
     * @param file    CSV文件
     * @param dataId  数据ID
     * @return 货物列表
     * @throws IOException IO异常
     */
    List<Shipment> parseShipmentCsv(MultipartFile file, Integer dataId) throws IOException;

    /**
     * 解析稳定匹配结果CSV文件
     *
     * @param file    CSV文件
     * @param dataId  数据ID
     * @return 匹配结果数据（包含匹配结果和匹配详情）
     * @throws IOException IO异常
     */
    MatchResultData parseMatchResultCsv(MultipartFile file, Integer dataId) throws IOException;
    
    /**
     * 解析稳定匹配结果CSV文件
     *
     * @param file    CSV文件
     * @param dataId  数据ID
     * @return 匹配结果数据（包含匹配结果和匹配详情）
     * @throws IOException IO异常
     */
    MatchResultData parseMatchResultCsv(File file, Integer dataId) throws IOException;

    /**
     * 检查指定批次下是否已存在路线数据
     *
     * @param dataId 批次ID
     * @return 是否存在路线数据
     */
    boolean isRouteDataExists(Integer dataId);

    /**
     * 检查指定批次下是否已存在货物数据
     *
     * @param dataId 批次ID
     * @return 是否存在货物数据
     */
    boolean isShipmentDataExists(Integer dataId);

    /**
     * 获取批次的统计信息
     *
     * @param dataId 批次ID
     * @return 统计信息
     */
    BatchStatistics getBatchStatistics(Integer dataId);
}